package com.example.java_gobang.game;


import org.springframework.stereotype.Component;

import java.util.concurrent.ConcurrentHashMap;

//房间管理器
@Component
public class RoomManager {
    //需要通过哈希表的结构来进行管理游戏房间，使用ConcurrentHashMap是为了解决线程安全问题
    private ConcurrentHashMap<String, Room> rooms = new ConcurrentHashMap<>();
    //通过玩家的Id -> 房间的Id，简单地说就是玩家和游戏房间之间有一个映射关系(通过玩家的Id和游戏房间的Id实现映射关系)
    private ConcurrentHashMap<Integer, String> userIdToRoomId = new ConcurrentHashMap<>();

    //添加房间
    public void add(Room room, int userId1, int userId2) {
        rooms.put(room.getRoomId(), room);
        //此时在映射关系的哈希表中添加元素
        userIdToRoomId.put(userId1, room.getRoomId());
        userIdToRoomId.put(userId2, room.getRoomId());
    }

    //删除房间
    public void remove(String roomId, int userId1, int userId2) {
        rooms.remove(roomId);
        //此时也要将映射关系中的房间删除
        userIdToRoomId.remove(userId1);
        userIdToRoomId.remove(userId2);
    }

    //通过房间的Id获取房间信息
    public Room getRoomByRoomId(String roomId) {
        return rooms.get(roomId);
    }

    //通过玩家的Id获取房间信息
    public Room getRoomByUserId(int userId) {
        String roomId = userIdToRoomId.get(userId);
        if (roomId == null) {
            //如果此时获取的房间Id不存在直接返回null就行了
            return null;
        }
        //如果存在此时获取的房间Id存在,就可以返回游戏房间的信息
        return rooms.get(roomId);
    }
}
